package cn.wen.java.lang;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;

/**
 * Title：与运行时系统相关的各种常用功能
 * <p>
 * Description：
 * <p>
 * Copyright：Copyright (c) 2010-2012
 * 
 * @author <a href="mailto:ct_wen@qq.com">ctwen</a>, 温承瑭
 * @version Revision：1.0 Date：2012/3/21 Description：初完成。
 *          <p>
 */
public class HelperOfRuntime {

    /**
     * 可执行指定的command命令后返回结果。
     * 
     * @param command 命令
     * @return 执行 command 的反馈结果。
     * @throws IOException
     * @throws InterruptedException
     * @see #exec(String, String)
     */
    public static StringBuilder exec(String command) throws IOException, InterruptedException {
	return exec(command, null);
    }

    /**
     * 可执行指定的command命令后返回指定编码方式的结果。
     * 
     * @param command 命令
     * @param charset 字符集
     * @return 执行 command 的反馈结果。
     * @throws UnsupportedEncodingException
     * @throws IOException
     * @throws InterruptedException
     * @see java.lang.Runtime.getRuntime.exec(command)
     */
    public static StringBuilder exec(String command, String charset) throws UnsupportedEncodingException, IOException,
	    InterruptedException {
	StringBuilder sb = null;
	BufferedReader reader = null;
	Process pro = Runtime.getRuntime().exec(command);
	try {
	    if (StringUtils.isEmpty(charset)) reader = new BufferedReader(new InputStreamReader(pro.getInputStream()));
	    else reader = new BufferedReader(new InputStreamReader(pro.getInputStream(), charset));
	    sb = new StringBuilder(IOUtils.toString(reader));
	    pro.waitFor();
	    pro.exitValue();
	}
	finally {
	    IOUtils.closeQuietly(reader);
	}
	return sb;
    }

}
